今天講一下Cube.js在後端是如何設定與資料庫連線,以及如何在後端啟動Cube.js Server。Cube.js支援多樣的資料庫連線,比方說Postgres, Oracle, MS SQL, MongoDB, ect. 我們公司使用的Db是Postgres,接下來會用它作為範例。
需要將以下內容添加到.env文件中,以連結Postgres資料庫:
CUBEJS_DB_TYPE=postgres //DB類型
CUBEJS_DB_HOST=my.postgres.host //數據庫的主機 URL
CUBEJS_DB_NAME=my_postgres_database //要連接的數據庫的名稱
CUBEJS_DB_USER=postgres_user //用於連接數據庫的用戶名
CUBEJS_DB_PASS=********** //用於連接數據庫的密碼
CUBEJS_DB_SS=true //是否啟用 SSL 加密
有一個很便利的功能是,Cube.j預計新增可以連線多個資料庫的多租戶(Multitenancy)功能(官方宣告預計在10月27日上午 9-10:30舉行研討會),只要連線設定好,就可以同時取用多個資料庫內的資料!可以用以下方式設定,雖然我們沒有有使用到這個功能,但還是想稍微介紹一下,可以這麼使用:
const PostgresDriver = require('@cubejs-backend/postgres-driver');
const AthenaDriver = require('@cubejs-backend/athena-driver');
const BigQueryDriver = require('@cubejs-backend/bigquery-driver');
module.exports = {
dbType: ({ dataSource } = {}) => {
if (dataSource === 'web') {
return 'athena';
} else if (dataSource === 'googleAnalytics') {
return 'bigquery';
} else {
return 'postgres';
}
},
driverFactory: ({ dataSource } = {}) => {
if (dataSource === 'web') {
return new AthenaDriver();
} else if (dataSource === 'googleAnalytics') {
return new BigQueryDriver();
} else if (dataSource === 'financials') {
return new PostgresDriver({
database: 'financials',
host: 'financials-db.acme.com',
user: process.env.FINANCIALS_DB_USER,
password: process.env.FINANCIALS_DB_PASS,
});
} else {
return new PostgresDriver();
}
},
};
接下來可在後端開啟一個index.js的檔案
const CubejsServer = require('@cubejs-backend/server');
const server = new CubejsServer();
server.listen().then(({ version, port }) => {
console.log(`? Cube.js server (${version}) is listening on ${port}`);
});
當建立CubejsSverver()函數裡面可以傳入Cofig(設置),在Config裡面可以設置很多配置,可以透過以下方式:
const options = {
logger: (msg, params) => {
...
},
checkAuth: async (req, auth) => {
...
},
...
}
const server = new Cube.jsServer(options)
可以參考這裡的詳細介紹
有一個比較需要注意的是,Cube.js可搭配Redis使用,但有可能會因為connection pool造成Timeout Error的問題,可以參考這篇